package com.ccys.db.entity;

import com.ccys.db.rely.BaseEntity;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;

import javax.persistence.Column;
import javax.persistence.Table;
import java.math.BigDecimal;
import java.util.Date;

/**
* Created by Mybatis Generator on 2023/12/29
*/
@Data
@Table(name = "tbl_booking")
@NoArgsConstructor
@AllArgsConstructor
public class TblBooking extends BaseEntity {
    @Column(name = "doctor_id")
    private String doctorId;

    /**
     * 存储的是specialisation表里的identification，
     */
    @Column(name = "specialisation_id")
    @ApiModelProperty("存储的是specialisation表里的identification，")
    private String specialisationId;

    /**
     * 医生的companyId
     */
    @Column(name = "company_id")
    @ApiModelProperty("医生的companyId")
    private String companyId;

    @Column(name = "mem_id")
    private String memId;


    @ApiModelProperty("问诊病人的id")
    @Column(name = "patient_mem_id")
    private String patientMemId;


    /**
     * 对应原表的  booking_code
     */
    @Column(name = "consultation_no")
    private String consultationNo;

    @Column(name = "member_age")
    private Integer memberAge;

    /**
     * 与sub_status组合，详情见文档描述
     */
    @ApiModelProperty("与sub_status组合，详情见文档描述")
    private Integer status;

    @Column(name = "sub_status")
    private Integer subStatus;



    @ApiModelProperty("复诊时，记录上一次的编号")
    @Column(name = "follow_up_consultation_no")
    private String followUpConsultationNo;

    /**
     * 医生问诊时所在诊所id
     */
    @Column(name = "clinic_id")
    @ApiModelProperty("医生问诊时所在诊所id")
    private String clinicId;




    @ApiModelProperty("1adult 2child")
    @Column(name = "mem_type")
    private Integer memType;

    /**
     * 病人所在国家
     */
    @Column(name = "patient_country_of_residence")
    @ApiModelProperty("病人所在国家")
    private String patientCountryOfResidence;

    /**
     * 医生所在国家
     */
    @Column(name = "doctor_country_of_residence")
    @ApiModelProperty("医生所在国家")
    private String doctorCountryOfResidence;

    /**
     * 医生端跳过病人并且移除队列时，设置为1
     */
    @Column(name = "doctor_manual")
    @ApiModelProperty("医生端跳过病人并且移除队列时，设置为1")
    private Integer doctorManual;

    /**
     * 问诊结算点击proceed修改为1
     */
    @Column(name = "paid_prescription")
    @ApiModelProperty("问诊结算点击proceed修改为1")
    private Integer paidPrescription;





    /**
     * in-clinic的问诊全部存储1
     */
    @Column(name = "add_delivery_fee")
    @ApiModelProperty("in-clinic的问诊全部存储1")
    private Integer addDeliveryFee;



    /**
     * 隐藏问诊
     */
    @Column(name = "hide_from_patient")
    @ApiModelProperty("隐藏问诊")
    private Integer hideFromPatient;


    /**
     * 第一次删除的时间
     */
    @Column(name = "del_at")
    @ApiModelProperty("第一次删除的时间")
    private Date delAt;




    /**
     * 第一次删除人
     */
    @Column(name = "del_by")
    @ApiModelProperty("第一次删除人")
    private String delBy;



    /**
     * 保留历史数据 病人aia相关的member id
     */
    @Column(name = "member_aia_corporate_id")
    @ApiModelProperty("保留历史数据 病人aia相关的member id")
    private String memberAiaCorporateId;

    /**
     * 保留历史数据 AIA corporate plan的id，合并所有benefit后可以删除
     */
    @Column(name = "aia_corporate_id")
    @ApiModelProperty("保留历史数据 AIA corporate plan的id，合并所有benefit后可以删除")
    private String aiaCorporateId;

    /**
     * 保留历史数据 AIA corporate benefit的id，合并所有benefit后可以删除
     */
    @Column(name = "aia_corporate_benefit_id")
    @ApiModelProperty("保留历史数据 AIA corporate benefit的id，合并所有benefit后可以删除")
    private String aiaCorporateBenefitId;

    /**
     * 保留历史数据 DC benefit id合并之后可以去掉
     */
    @Column(name = "direct_corporate_benefit_id")
    @ApiModelProperty("保留历史数据 DC benefit id合并之后可以去掉")
    private String directCorporateBenefitId;

    /**
     * 保留历史数据 使用的cdmp benefit id
     */
    @Column(name = "cdmp_program_benefit_id")
    @ApiModelProperty("保留历史数据 使用的cdmp benefit id")
    private String cdmpProgramBenefitId;

    /**
     * 保留历史数据 SUB的benefit id
     */
    @Column(name = "subscription_package_benefit_id")
    @ApiModelProperty("保留历史数据 SUB的benefit id")
    private String subscriptionPackageBenefitId;

    /**
     * 问诊使用的配套类型0:retail 1:AIA corporate;2:Direct corporate;3:AIA Healthshield;4:Subscription;5:EAP ; 6:CDMP
     */
    @Column(name = "plan_type")
    @ApiModelProperty("问诊使用的配套类型0:retail 1:AIA corporate;2:Direct corporate;3:AIA Healthshield;4:Subscription;5:EAP ; 6:CDMP")
    private Integer planType;

    /**
     * 病人使用的benefitId
     */
    @Column(name = "benefit_id")
    @ApiModelProperty("病人使用的benefitId")
    private String benefitId;

    /**
     * 病人使用的benefit关联表id
     */
    @Column(name = "benefit_member_id")
    @ApiModelProperty("病人使用的benefit关联表id")
    private String benefitMemberId;

    /**
     * SUB sintel订单里的activation_code
     */
    @Column(name = "active_code")
    @ApiModelProperty("SUB sintel订单里的activation_code")
    private String activeCode;

    /**
     * 使用到的benefit服务设置(tbl_plan_benefit_service)
     */
    @Column(name = "benefit_service_id")
    @ApiModelProperty("使用到的benefit服务设置(tbl_plan_benefit_service)")
    private String benefitServiceId;



    /**
     * 使用到的discount里的deeplink
     */
    @Column(name = "deeplink_id")
    @ApiModelProperty("使用到的discount里的deeplink")
    private String deeplinkId;



    @Column(name = "payment_at_utc")
    @ApiModelProperty("支付时间时间戳")
    private Long paymentAtUtc;





    @ApiModelProperty("是否为预约")
    @Column(name = "is_appointment")
    private Integer isAppointment;

    /**
     * 预约状态 1:pending 2:confirmed 3:cancelled
     */
    @Column(name = "appointment_status")
    @ApiModelProperty("预约状态 1:pending 2:confirmed 3:cancelled")
    private Integer appointmentStatus;

    /**
     * 预约的时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Column(name = "appointment_time")
    @ApiModelProperty("预约的时间")
    private Date appointmentTime;

    /**
     * 预约时段的结束时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Column(name = "appointment_end_time")
    @ApiModelProperty("预约时段的结束时间")
    private Date appointmentEndTime;

    /**
     * 预约类型 1in-clinic 2:video 3:text-based
     */
    @Column(name = "appointment_type")
    @ApiModelProperty("预约类型 1in-clinic 2:video 3:text-based")
    private Integer appointmentType;

    /**
     * 预约取消理由id
     */
    @Column(name = "ac_reason_id")
    @ApiModelProperty("预约取消理由id")
    private String acReasonId;

    /**
     * 预约时间 同创建时间
     */
    @Column(name = "appointment_created_on")
    @ApiModelProperty("预约时间 同创建时间")
    private Date appointmentCreatedOn;



    /**
     * 记录GAP返回的结果，数据组没在用，保留
     */
    @Column(name = "reactivate_consult")
    @ApiModelProperty("记录GAP返回的结果，数据组没在用，保留")
    private Integer reactivateConsult;



    /**
     * 预约到时间，进入队列，app上有提示点击进入，通知服务端修改成1,目前只是纯展示,主要用于TBTC
     */
    @Column(name = "patient_ready")
    @ApiModelProperty("预约到时间，进入队列，app上有提示点击进入，通知服务端修改成1,目前只是纯展示,主要用于TBTC")
    private Integer patientReady;

    /**
     * TBTC问诊，医生点击来更改状态，纯展示
     */
    @Column(name = "doctor_ready")
    @ApiModelProperty("TBTC问诊，医生点击来更改状态，纯展示")
    private Integer doctorReady;

    /**
     * 预约会提前3天发送短信，0未发送，1已发送
     */
    @Column(name = "flag_send_sms")
    @ApiModelProperty("预约会提前3天发送短信，0未发送，1已发送")
    private Integer flagSendSms;




    /**
     * 时区字符串 示例+08:00
     */
    @Column(name = "booking_time_zone")
    @ApiModelProperty("时区字符串 示例+08:00")
    private String bookingTimeZone;


    /**
     * todo 是否保留 越南病人proceed without medication时存储1，几乎很少用到了
     */
    @Column(name = "patient_reset_medication")
    @ApiModelProperty("todo 是否保留 越南病人proceed without medication时存储1，几乎很少用到了")
    private Integer patientResetMedication;



    /**
     * 断掉重练记录上一次booking的id，在问诊过程中，病人连接中断，医生点击断掉链接并且waived charge,创建新的booking并且放入队列,当前booking状态改为-6,0,并且新的booking添加的同时，创建log(100,8)
     */
    @Column(name = "disconnected_booking_id")
    @ApiModelProperty("断掉重练记录上一次booking的id，在问诊过程中，病人连接中断，医生点击断掉链接并且waived charge,创建新的booking并且放入队列,当前booking状态改为-6,0,并且新的booking添加的同时，创建log(100,8)")
    private String disconnectedBookingId;



    /**
     * 是否已经给hbhs的病人发送邮件，cron job做的事情，目前不知道我们这里怎么用，先保留
     */
    @Column(name = "sent_hbhs_email")
    @ApiModelProperty("是否已经给hbhs的病人发送邮件，cron job做的事情，目前不知道我们这里怎么用，先保留")
    private Integer sentHbhsEmail;

    /**
     * 使用cdmp时，医生选择chronic或者acute
     */
    @Column(name = "is_cdmp_chronic")
    @ApiModelProperty("使用cdmp时，医生选择chronic或者acute")
    private Integer isCdmpChronic;





    /**
     * Todo 
     */
    @Column(name = "deeplink_identifier_for_tracking")
    @ApiModelProperty("Todo ")
    private String deeplinkIdentifierForTracking;



    @Column(name = "hide_reason")
    private String hideReason;

    /**
     * 第一次删除的理由
     */
    @Column(name = "delete_reason")
    @ApiModelProperty("第一次删除的理由")
    private String deleteReason;



    /**
     * 预约留言
     */
    @Column(name = "appointment_note")
    @ApiModelProperty("预约留言")
    private String appointmentNote;





    /**
     * 医生类型:1GP 2SP
     */
    @Column(name = "consult_type")
    @ApiModelProperty("医生类型:1GP 2SP")
    private Integer consultType;


    @ApiModelProperty("问诊类型1online(在线问诊) 5offline(线下问诊) 6text-based")
    @Column(name = "consultation_mode")
    private Integer consultationMode;

    @Column(name = "group_id")
    private String groupId;


    @ApiModelProperty("医生在MEMO或者RL/MC之后点击完成")
    @Column(name = "doctor_is_completed")
    private Integer doctorIsCompleted;



    //TODO   需要用到  booking_delivery_type 字段 判断是否发送电子邮件


}